package com.zenith.api.feign.edu;

import com.zenith.common.result.Result;
import com.zenith.common.result.PageResult;
import com.zenith.api.po.dto.edu.*;
import com.zenith.api.po.vo.edu.*;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 教育服务Feign客户端 - API服务
 */
@FeignClient(name = "zenith-middleware-service", path = "/middleware/edu", contextId = "api-edu-client")
public interface EduServiceFeignClient {
    
    // =========================== 课程管理相关接口 ===========================
    
    @Operation(summary = "创建课程")
    @PostMapping("/course/createCourse")
    Result<EduCourseVO> createCourse(@RequestBody EduCourseDTO dto);

    @Operation(summary = "根据ID获取课程详情")
    @GetMapping("/getCourseById/{id}")
    Result<EduCourseVO> getCourseById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程信息")
    @PostMapping("/course/updateCourse")
    Result<EduCourseVO> updateCourse(@RequestBody EduCourseDTO dto);

    @Operation(summary = "删除指定课程")
    @DeleteMapping("/deleteCourse/{id}")
    Result<Void> deleteCourse(@PathVariable("id") Long id);

    @Operation(summary = "获取课程列表")
    @PostMapping("/course/getCourseList")
    Result<List<EduCourseVO>> getCourseList();

    // =========================== 班级管理相关接口 ===========================

    @Operation(summary = "创建班级")
    @PostMapping("/class/createClass")
    Result<EduClassVO> createClass(@RequestBody EduClassDTO dto);

    @Operation(summary = "根据ID获取班级详情")
    @GetMapping("/getClassById/{id}")
    Result<EduClassVO> getClassById(@PathVariable("id") Long id);

    @Operation(summary = "更新班级信息")
    @PostMapping("/class/updateClass")
    Result<EduClassVO> updateClass(@RequestBody EduClassDTO dto);

    @Operation(summary = "删除指定班级")
    @DeleteMapping("/deleteClass/{id}")
    Result<Void> deleteClass(@PathVariable("id") Long id);

    @Operation(summary = "获取班级列表")
    @PostMapping("/class/getClassList")
    Result<List<EduClassVO>> getClassList();

    // =========================== 学生管理相关接口 ===========================

    @Operation(summary = "创建学生")
    @PostMapping("/student/createStudent")
    Result<EduStudentVO> createStudent(@RequestBody EduStudentDTO dto);

    @Operation(summary = "根据ID获取学生详情")
    @GetMapping("/getStudentById/{id}")
    Result<EduStudentVO> getStudentById(@PathVariable("id") Long id);

    @Operation(summary = "更新学生信息")
    @PostMapping("/student/updateStudent")
    Result<EduStudentVO> updateStudent(@RequestBody EduStudentDTO dto);

    @Operation(summary = "删除指定学生")
    @DeleteMapping("/deleteStudent/{id}")
    Result<Void> deleteStudent(@PathVariable("id") Long id);

    @Operation(summary = "获取学生列表")
    @PostMapping("/student/getStudentList")
    Result<List<EduStudentVO>> getStudentList();

    // =========================== 教师管理相关接口 ===========================

    @Operation(summary = "创建教师")
    @PostMapping("/teacher/createTeacher")
    Result<EduTeacherVO> createTeacher(@RequestBody EduTeacherDTO dto);

    @Operation(summary = "根据ID获取教师详情")
    @GetMapping("/getTeacherById/{id}")
    Result<EduTeacherVO> getTeacherById(@PathVariable("id") Long id);

    @Operation(summary = "更新教师信息")
    @PostMapping("/teacher/updateTeacher")
    Result<EduTeacherVO> updateTeacher(@RequestBody EduTeacherDTO dto);

    @Operation(summary = "删除指定教师")
    @DeleteMapping("/deleteTeacher/{id}")
    Result<Void> deleteTeacher(@PathVariable("id") Long id);

    @Operation(summary = "获取教师列表")
    @PostMapping("/teacher/getTeacherList")
    Result<List<EduTeacherVO>> getTeacherList();

    // =========================== 作业管理相关接口 ===========================

    @Operation(summary = "创建作业")
    @PostMapping("/assignment/createAssignment")
    Result<EduAssignmentVO> createAssignment(@RequestBody EduAssignmentDTO dto);

    @Operation(summary = "根据ID获取作业详情")
    @GetMapping("/getAssignmentById/{id}")
    Result<EduAssignmentVO> getAssignmentById(@PathVariable("id") Long id);

    @Operation(summary = "更新作业信息")
    @PostMapping("/assignment/updateAssignment")
    Result<EduAssignmentVO> updateAssignment(@RequestBody EduAssignmentDTO dto);

    @Operation(summary = "删除指定作业")
    @DeleteMapping("/deleteAssignment/{id}")
    Result<Void> deleteAssignment(@PathVariable("id") Long id);

    @Operation(summary = "获取作业列表")
    @PostMapping("/assignment/getAssignmentList")
    Result<List<EduAssignmentVO>> getAssignmentList();

    // =========================== 作业题目管理相关接口 ===========================

    @Operation(summary = "创建作业题目")
    @PostMapping("/assignment-question/createAssignmentQuestion")
    Result<EduAssignmentQuestionVO> createAssignmentQuestion(@RequestBody EduAssignmentQuestionDTO dto);

    @Operation(summary = "根据ID获取作业题目详情")
    @GetMapping("/getAssignmentQuestionById/{id}")
    Result<EduAssignmentQuestionVO> getAssignmentQuestionById(@PathVariable("id") Long id);

    @Operation(summary = "更新作业题目信息")
    @PostMapping("/assignment-question/updateAssignmentQuestion")
    Result<EduAssignmentQuestionVO> updateAssignmentQuestion(@RequestBody EduAssignmentQuestionDTO dto);

    @Operation(summary = "删除指定作业题目")
    @DeleteMapping("/deleteAssignmentQuestion/{id}")
    Result<Void> deleteAssignmentQuestion(@PathVariable("id") Long id);

    @Operation(summary = "获取作业题目列表")
    @PostMapping("/assignment-question/listAssignmentQuestion")
    Result<List<EduAssignmentQuestionVO>> getAssignmentQuestionList();

    // =========================== 作业提交管理相关接口 ===========================

    @Operation(summary = "创建作业提交")
    @PostMapping("/assignment-submission/createAssignmentSubmission")
    Result<EduAssignmentSubmissionVO> createAssignmentSubmission(@RequestBody EduAssignmentSubmissionDTO dto);

    @Operation(summary = "根据ID获取作业提交详情")
    @GetMapping("/getAssignmentSubmissionById/{id}")
    Result<EduAssignmentSubmissionVO> getAssignmentSubmissionById(@PathVariable("id") Long id);

    @Operation(summary = "更新作业提交信息")
    @PostMapping("/assignment-submission/updateAssignmentSubmission")
    Result<EduAssignmentSubmissionVO> updateAssignmentSubmission(@RequestBody EduAssignmentSubmissionDTO dto);

    @Operation(summary = "删除指定作业提交")
    @DeleteMapping("/deleteAssignmentSubmission/{id}")
    Result<Void> deleteAssignmentSubmission(@PathVariable("id") Long id);

    @Operation(summary = "获取作业提交列表")
    @PostMapping("/assignment-submission/getAssignmentSubmissionList")
    Result<List<EduAssignmentSubmissionVO>> getAssignmentSubmissionList();

    // =========================== 证书管理相关接口 ===========================

    @Operation(summary = "创建证书")
    @PostMapping("/certificate/createCertificate")
    Result<EduCertificateVO> createCertificate(@RequestBody EduCertificateDTO dto);

    @Operation(summary = "根据ID获取证书详情")
    @GetMapping("/getCertificateById/{id}")
    Result<EduCertificateVO> getCertificateById(@PathVariable("id") Long id);

    @Operation(summary = "更新证书信息")
    @PostMapping("/certificate/updateCertificate")
    Result<EduCertificateVO> updateCertificate(@RequestBody EduCertificateDTO dto);

    @Operation(summary = "删除指定证书")
    @DeleteMapping("/deleteCertificate/{id}")
    Result<Void> deleteCertificate(@PathVariable("id") Long id);

    @Operation(summary = "获取证书列表")
    @PostMapping("/certificate/getCertificateList")
    Result<List<EduCertificateVO>> getCertificateList();

    // =========================== 章节管理相关接口 ===========================

    @Operation(summary = "创建章节")
    @PostMapping("/chapter/createChapter")
    Result<EduChapterVO> createChapter(@RequestBody EduChapterDTO dto);

    @Operation(summary = "根据ID获取章节详情")
    @GetMapping("/getChapterById/{id}")
    Result<EduChapterVO> getChapterById(@PathVariable("id") Long id);

    @Operation(summary = "更新章节信息")
    @PostMapping("/chapter/updateChapter")
    Result<EduChapterVO> updateChapter(@RequestBody EduChapterDTO dto);

    @Operation(summary = "删除指定章节")
    @DeleteMapping("/deleteChapter/{id}")
    Result<Void> deleteChapter(@PathVariable("id") Long id);

    @Operation(summary = "获取章节列表")
    @PostMapping("/chapter/list")
    Result<List<EduChapterVO>> getChapterList();

    @Operation(summary = "根据课程ID获取章节列表")
    @PostMapping("/chapter/getChaptersByCourseId/{courseId}")
    Result<List<EduChapterVO>> getChaptersByCourseId(@PathVariable Long courseId);

    // =========================== 签到管理相关接口 ===========================

    @Operation(summary = "创建签到")
    @PostMapping("/checkin/createCheckin")
    Result<EduCheckinVO> createCheckin(@RequestBody EduCheckinDTO dto);

    @Operation(summary = "根据ID获取签到详情")
    @GetMapping("/getCheckinById/{id}")
    Result<EduCheckinVO> getCheckinById(@PathVariable("id") Long id);

    @Operation(summary = "更新签到信息")
    @PostMapping("/checkin/updateCheckin")
    Result<EduCheckinVO> updateCheckin(@RequestBody EduCheckinDTO dto);

    @Operation(summary = "删除指定签到")
    @DeleteMapping("/deleteCheckin/{id}")
    Result<Void> deleteCheckin(@PathVariable("id") Long id);

    @Operation(summary = "获取签到列表")
    @PostMapping("/checkin/getCheckinList")
    Result<List<EduCheckinVO>> getCheckinList();

    // =========================== 签到记录管理相关接口 ===========================

    @Operation(summary = "创建签到记录")
    @PostMapping("/checkin-record/createCheckinRecord")
    Result<EduCheckinRecordVO> createCheckinRecord(@RequestBody EduCheckinRecordDTO dto);

    @Operation(summary = "根据ID获取签到记录详情")
    @GetMapping("/getCheckinRecordById/{id}")
    Result<EduCheckinRecordVO> getCheckinRecordById(@PathVariable("id") Long id);

    @Operation(summary = "更新签到记录信息")
    @PostMapping("/checkin-record/updateCheckinRecord")
    Result<EduCheckinRecordVO> updateCheckinRecord(@RequestBody EduCheckinRecordDTO dto);

    @Operation(summary = "删除指定签到记录")
    @DeleteMapping("/deleteCheckinRecord/{id}")
    Result<Void> deleteCheckinRecord(@PathVariable("id") Long id);

    @Operation(summary = "获取签到记录列表")
    @PostMapping("/checkin-record/getCheckinRecordList")
    Result<List<EduCheckinRecordVO>> getCheckinRecordList();

    // =========================== 课程班级关系管理相关接口 ===========================

    @Operation(summary = "创建课程班级关系")
    @PostMapping("/course-class/createCourseClass")
    Result<EduCourseClassVO> createCourseClass(@RequestBody EduCourseClassDTO dto);

    @Operation(summary = "根据ID获取课程班级详情")
    @GetMapping("/getCourseClassById/{id}")
    Result<EduCourseClassVO> getCourseClassById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程班级关系信息")
    @PostMapping("/course-class/updateCourseClass")
    Result<EduCourseClassVO> updateCourseClass(@RequestBody EduCourseClassDTO dto);

    @Operation(summary = "删除指定课程班级")
    @DeleteMapping("/deleteCourseClass/{id}")
    Result<Void> deleteCourseClass(@PathVariable("id") Long id);

    @Operation(summary = "获取课程班级关系列表")
    @PostMapping("/course-class/getCourseClassList")
    Result<List<EduCourseClassVO>> getCourseClassList();

    // =========================== 课程评价管理相关接口 ===========================

    @Operation(summary = "创建课程评价")
    @PostMapping("/course-rating/createCourseRating")
    Result<EduCourseRatingVO> createCourseRating(@RequestBody EduCourseRatingDTO dto);

    @Operation(summary = "根据ID获取课程评分详情")
    @GetMapping("/getCourseRatingById/{id}")
    Result<EduCourseRatingVO> getCourseRatingById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程评价信息")
    @PostMapping("/course-rating/updateCourseRating")
    Result<EduCourseRatingVO> updateCourseRating(@RequestBody EduCourseRatingDTO dto);

    @Operation(summary = "删除指定课程评分")
    @DeleteMapping("/deleteCourseRating/{id}")
    Result<Void> deleteCourseRating(@PathVariable("id") Long id);

    @Operation(summary = "获取课程评价列表")
    @PostMapping("/course-rating/getCourseRatingList")
    Result<List<EduCourseRatingVO>> getCourseRatingList();

    // =========================== 课程选课管理相关接口 ===========================

    @Operation(summary = "创建课程选课")
    @PostMapping("/course-selection/createCourseSelection")
    Result<EduCourseSelectionVO> createCourseSelection(@RequestBody EduCourseSelectionDTO dto);

    @Operation(summary = "根据ID获取选课详情")
    @GetMapping("/getCourseSelectionById/{id}")
    Result<EduCourseSelectionVO> getCourseSelectionById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程选课信息")
    @PostMapping("/course-selection/updateCourseSelection")
    Result<EduCourseSelectionVO> updateCourseSelection(@RequestBody EduCourseSelectionDTO dto);

    @Operation(summary = "删除指定选课")
    @DeleteMapping("/deleteCourseSelection/{id}")
    Result<Void> deleteCourseSelection(@PathVariable("id") Long id);

    @Operation(summary = "获取课程选课列表")
    @PostMapping("/course-selection/getCourseSelectionList")
    Result<List<EduCourseSelectionVO>> getCourseSelectionList();

    // =========================== 学分管理相关接口 ===========================

    @Operation(summary = "创建学分")
    @PostMapping("/credit/createCredit")
    Result<EduCreditVO> createCredit(@RequestBody EduCreditDTO dto);

    @Operation(summary = "根据ID获取学分详情")
    @GetMapping("/getCreditById/{id}")
    Result<EduCreditVO> getCreditById(@PathVariable("id") Long id);

    @Operation(summary = "更新学分信息")
    @PostMapping("/credit/updateCredit")
    Result<EduCreditVO> updateCredit(@RequestBody EduCreditDTO dto);

    @Operation(summary = "删除指定学分")
    @DeleteMapping("/deleteCredit/{id}")
    Result<Void> deleteCredit(@PathVariable("id") Long id);

    @Operation(summary = "获取学分列表")
    @PostMapping("/credit/getCreditList")
    Result<List<EduCreditVO>> getCreditList();

    // =========================== 院系管理相关接口 ===========================

    @Operation(summary = "创建院系")
    @PostMapping("/department/createDepartment")
    Result<EduDepartmentVO> createDepartment(@RequestBody EduDepartmentDTO dto);

    @Operation(summary = "根据ID获取部门详情")
    @GetMapping("/getDepartmentById/{id}")
    Result<EduDepartmentVO> getDepartmentById(@PathVariable("id") Long id);

    @Operation(summary = "更新院系信息")
    @PostMapping("/department/updateDepartment")
    Result<EduDepartmentVO> updateDepartment(@RequestBody EduDepartmentDTO dto);

    @Operation(summary = "删除指定院系")
    @DeleteMapping("/deleteDepartment/{id}")
    Result<Void> deleteDepartment(@PathVariable("id") Long id);

    @Operation(summary = "获取院系列表")
    @PostMapping("/department/getDepartmentList")
    Result<List<EduDepartmentVO>> getDepartmentList();

    // =========================== 考试记录管理相关接口 ===========================

    @Operation(summary = "创建考试记录")
    @PostMapping("/exam-record/createExamRecord")
    Result<EduExamRecordVO> createExamRecord(@RequestBody EduExamRecordDTO dto);

    @Operation(summary = "根据ID获取考试记录详情")
    @GetMapping("/getExamRecordById/{id}")
    Result<EduExamRecordVO> getExamRecordById(@PathVariable("id") Long id);

    @Operation(summary = "更新考试记录信息")
    @PostMapping("/exam-record/updateExamRecord")
    Result<EduExamRecordVO> updateExamRecord(@RequestBody EduExamRecordDTO dto);

    @Operation(summary = "删除指定考试记录")
    @DeleteMapping("/deleteExamRecord/{id}")
    Result<Void> deleteExamRecord(@PathVariable("id") Long id);

    @Operation(summary = "获取考试记录列表")
    @PostMapping("/exam-record/getExamRecordList")
    Result<List<EduExamRecordVO>> getExamRecordList();

    // =========================== 论坛点赞管理相关接口 ===========================

    @Operation(summary = "创建论坛点赞记录")
    @PostMapping("/forum-like/createForumLike")
    Result<EduForumLikeVO> createForumLike(@RequestBody EduForumLikeDTO dto);

    @Operation(summary = "根据ID获取论坛点赞详情")
    @GetMapping("/getForumLikeById/{id}")
    Result<EduForumLikeVO> getForumLikeById(@PathVariable("id") Long id);

    @Operation(summary = "更新论坛点赞记录信息")
    @PostMapping("/forum-like/updateForumLike")
    Result<EduForumLikeVO> updateForumLike(@RequestBody EduForumLikeDTO dto);

    @Operation(summary = "删除指定论坛点赞")
    @DeleteMapping("/deleteForumLike/{id}")
    Result<Void> deleteForumLike(@PathVariable("id") Long id);

    @Operation(summary = "获取论坛点赞记录列表")
    @PostMapping("/forum-like/getForumLikeList")
    Result<List<EduForumLikeVO>> getForumLikeList();

    // =========================== 论坛回复管理相关接口 ===========================

    @Operation(summary = "创建论坛回复")
    @PostMapping("/forum-reply/createForumReply")
    Result<EduForumReplyVO> createForumReply(@RequestBody EduForumReplyDTO dto);

    @Operation(summary = "根据ID获取论坛回复详情")
    @GetMapping("/getForumReplyById/{id}")
    Result<EduForumReplyVO> getForumReplyById(@PathVariable("id") Long id);

    @Operation(summary = "更新论坛回复信息")
    @PostMapping("/forum-reply/updateForumReply")
    Result<EduForumReplyVO> updateForumReply(@RequestBody EduForumReplyDTO dto);

    @Operation(summary = "删除指定论坛回复")
    @DeleteMapping("/deleteForumReply/{id}")
    Result<Void> deleteForumReply(@PathVariable("id") Long id);

    @Operation(summary = "获取论坛回复列表")
    @PostMapping("/forum-reply/getForumReplyList")
    Result<List<EduForumReplyVO>> getForumReplyList();

    // =========================== 论坛主题管理相关接口 ===========================

    @Operation(summary = "创建论坛主题")
    @PostMapping("/forum-topic/createForumTopic")
    Result<EduForumTopicVO> createForumTopic(@RequestBody EduForumTopicDTO dto);

    @Operation(summary = "根据ID获取论坛主题详情")
    @GetMapping("/getForumTopicById/{id}")
    Result<EduForumTopicVO> getForumTopicById(@PathVariable("id") Long id);

    @Operation(summary = "更新论坛主题信息")
    @PostMapping("/forum-topic/updateForumTopic")
    Result<EduForumTopicVO> updateForumTopic(@RequestBody EduForumTopicDTO dto);

    @Operation(summary = "删除指定论坛主题")
    @DeleteMapping("/deleteForumTopic/{id}")
    Result<Void> deleteForumTopic(@PathVariable("id") Long id);

    @Operation(summary = "获取论坛主题列表")
    @PostMapping("/forum-topic/getForumTopicList")
    Result<List<EduForumTopicVO>> getForumTopicList();

    // =========================== 知识点管理相关接口 ===========================

    @Operation(summary = "创建知识点")
    @PostMapping("/knowledge-point/createKnowledgePoint")
    Result<EduKnowledgePointVO> createKnowledgePoint(@RequestBody EduKnowledgePointDTO dto);

    @Operation(summary = "根据ID获取知识点详情")
    @GetMapping("/getKnowledgePointById/{id}")
    Result<EduKnowledgePointVO> getKnowledgePointById(@PathVariable("id") Long id);

    @Operation(summary = "更新知识点信息")
    @PostMapping("/knowledge-point/updateKnowledgePoint")
    Result<EduKnowledgePointVO> updateKnowledgePoint(@RequestBody EduKnowledgePointDTO dto);

    @Operation(summary = "删除指定知识点")
    @DeleteMapping("/deleteKnowledgePoint/{id}")
    Result<Void> deleteKnowledgePoint(@PathVariable("id") Long id);

    @Operation(summary = "获取知识点列表")
    @PostMapping("/knowledge-point/getKnowledgePointList")
    Result<List<EduKnowledgePointVO>> getKnowledgePointList();

    // =========================== 直播课堂管理相关接口 ===========================

    @Operation(summary = "创建直播课堂")
    @PostMapping("/live-session/createLiveSession")
    Result<EduLiveSessionVO> createLiveSession(@RequestBody EduLiveSessionDTO dto);

    @Operation(summary = "根据ID获取直播详情")
    @GetMapping("/getLiveSessionById/{id}")
    Result<EduLiveSessionVO> getLiveSessionById(@PathVariable("id") Long id);

    @Operation(summary = "更新直播课堂信息")
    @PostMapping("/live-session/updateLiveSession")
    Result<EduLiveSessionVO> updateLiveSession(@RequestBody EduLiveSessionDTO dto);

    @Operation(summary = "删除指定直播")
    @DeleteMapping("/deleteLiveSession/{id}")
    Result<Void> deleteLiveSession(@PathVariable("id") Long id);

    @Operation(summary = "获取直播课堂列表")
    @PostMapping("/live-session/getLiveSessionList")
    Result<List<EduLiveSessionVO>> getLiveSessionList();

    // =========================== 直播观看记录管理相关接口 ===========================

    @Operation(summary = "创建直播观看记录")
    @PostMapping("/live-watch-record/createLiveWatchRecord")
    Result<EduLiveWatchRecordVO> createLiveWatchRecord(@RequestBody EduLiveWatchRecordDTO dto);

    @Operation(summary = "根据ID获取直播记录详情")
    @GetMapping("/getLiveSessionRecordById/{id}")
    Result<EduLiveSessionRecordVO> getLiveSessionRecordById(@PathVariable("id") Long id);

    @Operation(summary = "更新直播观看记录信息")
    @PostMapping("/live-watch-record/updateLiveWatchRecord")
    Result<EduLiveWatchRecordVO> updateLiveWatchRecord(@RequestBody EduLiveWatchRecordDTO dto);

    @Operation(summary = "删除指定直播记录")
    @DeleteMapping("/deleteLiveSessionRecord/{id}")
    Result<Void> deleteLiveSessionRecord(@PathVariable("id") Long id);

    @Operation(summary = "获取直播观看记录列表")
    @PostMapping("/live-watch-record/list")
    Result<List<EduLiveWatchRecordVO>> getLiveWatchRecordList();

    // =========================== 专业管理相关接口 ===========================

    @Operation(summary = "创建专业")
    @PostMapping("/major/createMajor")
    Result<EduMajorVO> createMajor(@RequestBody EduMajorDTO dto);

    @Operation(summary = "根据ID获取专业详情")
    @GetMapping("/getProgramById/{id}")
    Result<EduProgramVO> getProgramById(@PathVariable("id") Long id);

    @Operation(summary = "更新专业信息")
    @PostMapping("/major/updateMajor")
    Result<EduMajorVO> updateMajor(@RequestBody EduMajorDTO dto);

    @Operation(summary = "删除指定专业")
    @DeleteMapping("/deleteProgram/{id}")
    Result<Void> deleteProgram(@PathVariable("id") Long id);

    @Operation(summary = "获取专业列表")
    @PostMapping("/major/getMajorList")
    Result<List<EduMajorVO>> getMajorList();

    // =========================== 学习进度管理相关接口 ===========================

    @Operation(summary = "创建学习进度")
    @PostMapping("/progress/createProgress")
    Result<EduProgressVO> createProgress(@RequestBody EduProgressDTO dto);

    @Operation(summary = "根据ID获取学习进度详情")
    @GetMapping("/getProgressById/{id}")
    Result<EduProgressVO> getProgressById(@PathVariable("id") Long id);

    @Operation(summary = "更新学习进度信息")
    @PostMapping("/progress/updateProgress")
    Result<EduProgressVO> updateProgress(@RequestBody EduProgressDTO dto);

    @Operation(summary = "删除指定学习进度")
    @DeleteMapping("/deleteProgress/{id}")
    Result<Void> deleteProgress(@PathVariable("id") Long id);

    @Operation(summary = "获取学习进度列表")
    @PostMapping("/progress/getProgressList")
    Result<List<EduProgressVO>> getProgressList();

    // =========================== 题库管理相关接口 ===========================

    @Operation(summary = "创建题库")
    @PostMapping("/question-bank/createQuestionBank")
    Result<EduQuestionBankVO> createQuestionBank(@RequestBody EduQuestionBankDTO dto);

    @Operation(summary = "根据ID获取题库详情")
    @GetMapping("/getQuestionBankById/{id}")
    Result<EduQuestionBankVO> getQuestionBankById(@PathVariable("id") Long id);

    @Operation(summary = "更新题库信息")
    @PostMapping("/question-bank/updateQuestionBank")
    Result<EduQuestionBankVO> updateQuestionBank(@RequestBody EduQuestionBankDTO dto);

    @Operation(summary = "删除指定题库")
    @DeleteMapping("/deleteQuestionBank/{id}")
    Result<Void> deleteQuestionBank(@PathVariable("id") Long id);

    @Operation(summary = "获取题库列表")
    @PostMapping("/question-bank/getQuestionBankList")
    Result<List<EduQuestionBankVO>> getQuestionBankList();

    // =========================== 题目管理相关接口 ===========================

    @Operation(summary = "创建题目")
    @PostMapping("/question/createQuestion")
    Result<EduQuestionVO> createQuestion(@RequestBody EduQuestionDTO dto);

    @Operation(summary = "根据ID获取题目详情")
    @GetMapping("/getQuestionById/{id}")
    Result<EduQuestionVO> getQuestionById(@PathVariable("id") Long id);

    @Operation(summary = "更新题目信息")
    @PostMapping("/question/updateQuestion")
    Result<EduQuestionVO> updateQuestion(@RequestBody EduQuestionDTO dto);

    @Operation(summary = "删除指定题目")
    @DeleteMapping("/deleteQuestion/{id}")
    Result<Void> deleteQuestion(@PathVariable("id") Long id);

    @Operation(summary = "获取题目列表")
    @PostMapping("/question/getQuestionList")
    Result<List<EduQuestionVO>> getQuestionList();

    // =========================== 课程评价点赞管理相关接口 ===========================

    @Operation(summary = "创建课程评价点赞记录")
    @PostMapping("/rating-like/createRatingLike")
    Result<EduRatingLikeVO> createRatingLike(@RequestBody EduRatingLikeDTO dto);

    @Operation(summary = "根据ID获取课程评价点赞记录详情")
    @GetMapping("/getRatingLikeById/{id}")
    Result<EduRatingLikeVO> getRatingLikeById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程评价点赞记录信息")
    @PostMapping("/rating-like/updateRatingLike")
    Result<EduRatingLikeVO> updateRatingLike(@RequestBody EduRatingLikeDTO dto);

    @Operation(summary = "删除指定课程评价点赞记录")
    @DeleteMapping("/deleteRatingLike/{id}")
    Result<Void> deleteRatingLike(@PathVariable("id") Long id);

    @Operation(summary = "获取课程评价点赞记录列表")
    @PostMapping("/rating-like/getRatingLikeList")
    Result<List<EduRatingLikeVO>> getRatingLikeList();

    // =========================== 课程资源管理相关接口 ===========================

    @Operation(summary = "创建课程资源")
    @PostMapping("/resource/createResource")
    Result<EduResourceVO> createResource(@RequestBody EduResourceDTO dto);

    @Operation(summary = "根据ID获取课程资源详情")
    @GetMapping("/getResourceById/{id}")
    Result<EduResourceVO> getResourceById(@PathVariable("id") Long id);

    @Operation(summary = "更新课程资源信息")
    @PostMapping("/resource/updateResource")
    Result<EduResourceVO> updateResource(@RequestBody EduResourceDTO dto);

    @Operation(summary = "删除指定课程资源")
    @DeleteMapping("/deleteResource/{id}")
    Result<Void> deleteResource(@PathVariable("id") Long id);

    @Operation(summary = "获取课程资源列表")
    @PostMapping("/resource/getResourceList")
    Result<List<EduResourceVO>> getResourceList();

    // =========================== 学校管理相关接口 ===========================

    @Operation(summary = "创建学校")
    @PostMapping("/school/createSchool")
    Result<EduSchoolVO> createSchool(@RequestBody EduSchoolDTO dto);

    @Operation(summary = "根据ID获取学校详情")
    @GetMapping("/getSchoolById/{id}")
    Result<EduSchoolVO> getSchoolById(@PathVariable("id") Long id);

    @Operation(summary = "更新学校信息")
    @PostMapping("/school/updateSchool")
    Result<EduSchoolVO> updateSchool(@RequestBody EduSchoolDTO dto);

    @Operation(summary = "删除指定学校")
    @DeleteMapping("/deleteSchool/{id}")
    Result<Void> deleteSchool(@PathVariable("id") Long id);

    @Operation(summary = "获取学校列表")
    @PostMapping("/school/getSchoolList")
    Result<List<EduSchoolVO>> getSchoolList();

    // =========================== 学生成绩管理相关接口 ===========================

    @Operation(summary = "创建学生成绩")
    @PostMapping("/student-grade/createStudentGrade")
    Result<EduStudentGradeVO> createStudentGrade(@RequestBody EduStudentGradeDTO dto);

    @Operation(summary = "根据ID获取学生成绩详情")
    @GetMapping("/getScoreById/{id}")
    Result<EduScoreVO> getScoreById(@PathVariable("id") Long id);

    @Operation(summary = "更新学生成绩信息")
    @PostMapping("/student-grade/updateStudentGrade")
    Result<EduStudentGradeVO> updateStudentGrade(@RequestBody EduStudentGradeDTO dto);

    @Operation(summary = "删除指定学生成绩")
    @DeleteMapping("/deleteScore/{id}")
    Result<Void> deleteScore(@PathVariable("id") Long id);

    @Operation(summary = "获取学生成绩列表")
    @PostMapping("/student-grade/getStudentGradeList")
    Result<List<EduStudentGradeVO>> getStudentGradeList();

    // =========================== 通知管理相关接口 ===========================

    @Operation(summary = "创建通知")
    @PostMapping("/notification/createNotification")
    Result<EduNotificationVO> createNotification(@RequestBody EduNotificationDTO dto);

    @Operation(summary = "根据ID获取通知详情")
    @GetMapping("/getNotificationById/{id}")
    Result<EduNotificationVO> getNotificationById(@PathVariable("id") Long id);

    @Operation(summary = "更新通知信息")
    @PostMapping("/notification/updateNotification")
    Result<EduNotificationVO> updateNotification(@RequestBody EduNotificationDTO dto);

    @Operation(summary = "删除指定通知")
    @DeleteMapping("/deleteNotification/{id}")
    Result<Void> deleteNotification(@PathVariable("id") Long id);

    @Operation(summary = "获取通知列表")
    @PostMapping("/notification/getNotificationList")
    Result<List<EduNotificationVO>> getNotificationList();

    // =========================== 学期管理相关接口 ===========================

    @Operation(summary = "创建学期")
    @PostMapping("/semester/createSemester")
    Result<EduSemesterVO> createSemester(@RequestBody EduSemesterDTO dto);

    @Operation(summary = "根据ID获取学期详情")
    @GetMapping("/getSemesterById/{id}")
    Result<EduSemesterVO> getSemesterById(@PathVariable("id") Long id);

    @Operation(summary = "更新学期信息")
    @PostMapping("/semester/updateSemester")
    Result<EduSemesterVO> updateSemester(@RequestBody EduSemesterDTO dto);

    @Operation(summary = "删除指定学期")
    @DeleteMapping("/deleteSemester/{id}")
    Result<Void> deleteSemester(@PathVariable("id") Long id);

    @Operation(summary = "获取学期列表")
    @PostMapping("/semester/getSemesterList")
    Result<List<EduSemesterVO>> getSemesterList();

    // =========================== 教师课程管理相关接口 ===========================

    @Operation(summary = "创建教师课程")
    @PostMapping("/teacher-course/createTeacherCourse")
    Result<EduTeacherCourseVO> createTeacherCourse(@RequestBody EduTeacherCourseDTO dto);

    @Operation(summary = "根据ID获取教师课程详情")
    @GetMapping("/getTeacherCourseById/{id}")
    Result<EduTeacherCourseVO> getTeacherCourseById(@PathVariable("id") Long id);

    @Operation(summary = "更新教师课程信息")
    @PostMapping("/teacher-course/updateTeacherCourse")
    Result<EduTeacherCourseVO> updateTeacherCourse(@RequestBody EduTeacherCourseDTO dto);

    @Operation(summary = "删除指定教师课程")
    @DeleteMapping("/deleteTeacherCourse/{id}")
    Result<Void> deleteTeacherCourse(@PathVariable("id") Long id);

    @Operation(summary = "获取教师课程列表")
    @PostMapping("/teacher-course/getTeacherCourseList")
    Result<List<EduTeacherCourseVO>> getTeacherCourseList();

    // =========================== 教师部门管理相关接口 ===========================

    @Operation(summary = "创建教师部门")
    @PostMapping("/teacher-department/createTeacherDepartment")
    Result<EduTeacherDepartmentVO> createTeacherDepartment(@RequestBody EduTeacherDepartmentDTO dto);

    @Operation(summary = "根据ID获取教师部门详情")
    @GetMapping("/getTeacherDepartmentById/{id}")
    Result<EduTeacherDepartmentVO> getTeacherDepartmentById(@PathVariable("id") Long id);

    @Operation(summary = "更新教师部门信息")
    @PostMapping("/teacher-department/updateTeacherDepartment")
    Result<EduTeacherDepartmentVO> updateTeacherDepartment(@RequestBody EduTeacherDepartmentDTO dto);

    @Operation(summary = "删除指定教师部门")
    @DeleteMapping("/deleteTeacherDepartment/{id}")
    Result<Void> deleteTeacherDepartment(@PathVariable("id") Long id);

    @Operation(summary = "获取教师部门列表")
    @PostMapping("/teacher-department/getTeacherDepartmentList")
    Result<List<EduTeacherDepartmentVO>> getTeacherDepartmentList();

    // =========================== 用户课程管理相关接口 ===========================

    @Operation(summary = "创建用户课程")
    @PostMapping("/user-course/createUserCourse")
    Result<EduUserCourseVO> createUserCourse(@RequestBody EduUserCourseDTO dto);

    @Operation(summary = "根据ID获取用户课程详情")
    @GetMapping("/getUserCourseById/{id}")
    Result<EduUserCourseVO> getUserCourseById(@PathVariable("id") Long id);

    @Operation(summary = "更新用户课程信息")
    @PostMapping("/user-course/updateUserCourse")
    Result<EduUserCourseVO> updateUserCourse(@RequestBody EduUserCourseDTO dto);

    @Operation(summary = "删除指定用户课程")
    @DeleteMapping("/deleteUserCourse/{id}")
    Result<Void> deleteUserCourse(@PathVariable("id") Long id);

    @Operation(summary = "获取用户课程列表")
    @PostMapping("/user-course/getUserCourseList")
    Result<List<EduUserCourseVO>> getUserCourseList();

    // =========================== 预警日志管理相关接口 ===========================

    @Operation(summary = "创建预警日志")
    @PostMapping("/warning-log/createWarningLog")
    Result<EduWarningLogVO> createWarningLog(@RequestBody EduWarningLogDTO dto);

    @Operation(summary = "根据ID获取预警日志详情")
    @GetMapping("/getWarningLogById/{id}")
    Result<EduWarningLogVO> getWarningLogById(@PathVariable("id") Long id);

    @Operation(summary = "更新预警日志信息")
    @PostMapping("/warning-log/updateWarningLog")
    Result<EduWarningLogVO> updateWarningLog(@RequestBody EduWarningLogDTO dto);

    @Operation(summary = "删除指定预警日志")
    @DeleteMapping("/deleteWarningLog/{id}")
    Result<Void> deleteWarningLog(@PathVariable("id") Long id);

    @Operation(summary = "获取预警日志列表")
    @PostMapping("/warning-log/getWarningLogList")
    Result<List<EduWarningLogVO>> getWarningLogList();

    // =========================== 预警规则管理相关接口 ===========================

    @Operation(summary = "创建预警规则")
    @PostMapping("/warning-rule/createWarningRule")
    Result<EduWarningRuleVO> createWarningRule(@RequestBody EduWarningRuleDTO dto);

    @Operation(summary = "根据ID获取预警规则详情")
    @GetMapping("/getWarningRuleById/{id}")
    Result<EduWarningRuleVO> getWarningRuleById(@PathVariable("id") Long id);

    @Operation(summary = "更新预警规则信息")
    @PostMapping("/warning-rule/updateWarningRule")
    Result<EduWarningRuleVO> updateWarningRule(@RequestBody EduWarningRuleDTO dto);

    @Operation(summary = "删除指定预警规则")
    @DeleteMapping("/deleteWarningRule/{id}")
    Result<Void> deleteWarningRule(@PathVariable("id") Long id);

    @Operation(summary = "获取预警规则列表")
    @PostMapping("/warning-rule/getWarningRuleList")
    Result<List<EduWarningRuleVO>> getWarningRuleList();
}